// 枚举定义不同的缓存类型
enum CacheType {
  Local, // 本地缓存
  Session, // 会话缓存
}

// 缓存类
class Cache {
  storage: Storage;

  // 构造函数，根据传入的缓存类型选择 localStorage 或 sessionStorage
  constructor(type: CacheType) {
    this.storage = type === CacheType.Local ? localStorage : sessionStorage;
  }

  // 设置缓存数据
  setCache(key: string, value: any) {
    if (value) {
      // 使用 JSON.stringify 将值转换为 JSON 字符串并存储
      this.storage.setItem(key, JSON.stringify(value));
    }
  }

  // 获取缓存数据
  getCache(key: string) {
    const value = this.storage.getItem(key);
    if (value) {
      // 使用 JSON.parse 将 JSON 字符串转换为对象并返回
      return JSON.parse(value);
    }
  }

  // 移除指定键的缓存数据
  removeCache(key: string) {
    this.storage.removeItem(key);
  }

  // 清空缓存
  clear() {
    this.storage.clear();
  }
}

// 创建本地缓存对象
const localCache = new Cache(CacheType.Local);

// 创建会话缓存对象
const sessionCache = new Cache(CacheType.Session);

// 导出本地缓存和会话缓存对象
export { localCache, sessionCache };
